home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-03 | 1004 b | 31 lines | [TEXT/R*ch] |
- (* Array2 -- as of 1995-09-12 *)
-
- (* Representation of an m * n array: an m-vector of n-arrays (rows),
- and the dimensions (m, n) *)
-
- type 'a array2 = 'a Array.array Vector.vector * int * int
-
- val maxLen = Array.maxLen;
-
- fun array (m, n, x) =
- (Vector.tabulate(m, fn _ => Array.array(n, x)), m, n);
-
- fun tabulate (m, n, f) =
- (Vector.tabulate(m, fn i => Array.tabulate(n, fn j => f(i,j))), m, n);
-
- fun dim (a,m,n) = (m,n);
-
- fun sub((a,m,n), i, j) = Array.sub(Vector.sub(a, i), j);
-
- fun update((a,m,n), i, j, x) = Array.update(Vector.sub(a, i), j, x);
-
- fun extract1((a,m,n), i, j, lenopt) =
- Array.extract(Vector.sub(a, i), j, lenopt);
-
- fun extract2((a,m,n), i, j, NONE) =
- if i<0 orelse j<0 orelse i>m orelse j>=n then raise Subscript
- else Vector.tabulate(m-i, fn k => Array.sub(Vector.sub(a, i+k), j))
- | extract2((a,m,n), i, j, SOME len) =
- if i<0 orelse j<0 orelse i>m orelse j>=n then raise Subscript
- else Vector.tabulate(len, fn k => Array.sub(Vector.sub(a, i+k), j))
-